package com.dingding.manager.modules.system.controller;

import java.util.List;

import javax.annotation.Resource;
import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.dingding.manager.common.beans.sys.SysRole;
import com.dingding.manager.common.beans.sys.SysRoleMenu;
import com.dingding.manager.common.dao.Page;
import com.dingding.manager.common.exception.BussinessException;
import com.dingding.manager.common.exception.enums.BizExceptionEnum;
import com.dingding.manager.core.util.ToolUtil;
import com.dingding.manager.modules.dirver.dto.RespResult;
import com.dingding.manager.modules.system.dto.role.ReqAddRoleDTO;
import com.dingding.manager.modules.system.dto.role.ReqRoleListDTO;
import com.dingding.manager.modules.system.dto.role.ResRoleDTO;
import com.dingding.manager.modules.system.service.RoleService;

/**
 * 
* @ClassName: RoleController 
* @Description: 角色controller
* @author SUNZHICHENG 
* @date 2016年12月5日 下午8:29:20 
* @version V2.6.2
 */
@Controller
@RequestMapping(value="sys/v1/role")
public class RoleController {
	
	@Resource(name="roleService")
	RoleService roleService;
	
	/**
	 * 
	 * @Description:角色列表 
	 * @param reqRoleListDTO  条件      
	 * @date 2016年12月6日 下午3:29:42
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/list")
	@ResponseBody
	public RespResult<ResRoleDTO>  getRoleList(@Valid ReqRoleListDTO reqRoleListDTO,Integer start, Integer length){
		Page<ResRoleDTO> roleList= roleService.getRoleList(reqRoleListDTO,start,length);
		RespResult<ResRoleDTO> respResult=new RespResult<ResRoleDTO>();
		respResult.setAaData(roleList.getList());
		respResult.setiTotalRecords(roleList.getTotalPage());
		respResult.setiTotalDisplayRecords(roleList.getTotalRow());
		return respResult;
	}
	
	/** 
	 * @Description: 角色详情     
	 * @date 2016年12月6日 下午3:30:42
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/info")
	@ResponseBody
	public ResRoleDTO getRoleById(Integer sysRoleId){
		if (ToolUtil.isEmpty(sysRoleId)) {
			return null;
		}
		return roleService.getRoleById(sysRoleId);
	}
	
	/** 
	 * @Description: 删除角色     
	 * @date 2016年12月6日 下午3:34:13
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/del")
	@ResponseBody
	public boolean deleteRole(Integer sysRoleId){
		if (ToolUtil.isEmpty(sysRoleId)) {
			return false;
		}
		return roleService.deleteRole(sysRoleId);
	}
	
	/**
	 * @Description:启用/禁用      
	 * @date 2016年12月6日 下午3:35:33
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/state")
	@ResponseBody
	public boolean modifyRoleState(Integer sysRoleId,Integer state){
		if (ToolUtil.isEmpty(sysRoleId) && ToolUtil.isEmpty(state)) {
			return false;
		}
		return roleService.modifyRoleState(sysRoleId, state);
	}
	
	
	/**
	 * @Description: 新建角色        
	 * @date 2016年12月6日 下午3:37:23
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping("/add")
	@ResponseBody
	public void addRole(@Valid ReqAddRoleDTO reqAddRoleDTO,BindingResult result){
		if (result.hasErrors()) {
			throw new BussinessException(BizExceptionEnum.REQUEST_NULL);
		}
		 roleService.addRole(reqAddRoleDTO);
	}
	
	/**
	 * @Description: 修改角色        
	 * @date 2016年12月6日 下午3:38:52
	 * @author SUNZHICHENG 
	 * @return 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/update")
	@ResponseBody
	public void updateRole(@Valid ReqAddRoleDTO reqAddRoleDTO,Integer sysRoleId, BindingResult result){
		if (result.hasErrors() && ToolUtil.isEmpty(sysRoleId)) {
			throw new BussinessException(BizExceptionEnum.REQUEST_NULL);
		}
		roleService.modifyRole( reqAddRoleDTO, sysRoleId);
	}
	
	/**
	 * @Description: 获取角色列表(用户管理展示角色列表)       
	 * @date 2016年12月7日 下午2:45:32
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/roles")
	@ResponseBody
	public List<SysRole> getRoles(){
		List<SysRole> roleList = roleService.getRoleList();		
		return roleList;
	}
	
	/**
	 * @Description: 给角色授权（访问菜单的权限）
	 * @date 2016年12月9日 上午10:26:01
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/accredit")
	@ResponseBody
	
	public boolean accreditToRole( Integer sysRoleId,  @RequestParam("sysMenuIds[]") List<Integer> sysMenuIds ){
		//角色id为空和菜单id集合为0 
		if (ToolUtil.isEmpty(sysRoleId) && sysMenuIds.size() == 0) {
			return false;
		}
		//授权
		return roleService.accreditToRole(sysRoleId, sysMenuIds);
	}
	
	/**
	 * @Description: 获取已授权列表
	 * @date 2016年12月9日 下午12:02:55
	 * @author SUNZHICHENG 
	 * @since V2.6.2
	 */
	@RequestMapping(value="/getAccreditList")
	@ResponseBody
	public List<SysRoleMenu> getAccreditList(Integer sysRoleId){
		if (ToolUtil.isEmpty(sysRoleId)) {
			return null;
		}
		//查询授权列表
		return roleService.getAccreditList(sysRoleId);
	};
}
